import { createApp, h, createVNode, render } from 'vue';
import AxiomConfirmDialog from '../components/common/AxiomConfirmDialog.vue';

export const useConfirm = (app) => {
  const show = (options = {}) => {
    // [重构] Promise 在这里仅用于知道用户操作了，但不传递 onConfirm 的执行结果
    return new Promise((resolve) => {
      const container = document.createElement('div');
      document.body.appendChild(container);

      const cleanup = () => {
        if (container && container.parentNode) {
          render(null, container);
          document.body.removeChild(container);
        }
      };

      // [核心修复] 将传入的 onConfirm 和 onCancel 直接作为 prop 传递给子组件
      // 并在执行后调用 cleanup 和 resolve
      const props = {
        modelValue: true, // 确保对话框可见
        ...options,
        onConfirm: async () => {
          // [V2 修复] 使用 try...finally 确保无论 onConfirm 成功与否，cleanup 都会被执行
          try {
            if (typeof options.onConfirm === 'function') {
              await options.onConfirm(); // 直接执行传入的异步确认逻辑
            }
            resolve(true); // 仅在成功时 resolve true
          } finally {
            cleanup(); // 无论成功或失败，都清理对话框
          }
        },
        onCancel: () => {
          if (typeof options.onCancel === 'function') {
            options.onCancel();
          }
          cleanup();
          resolve(false); // 表示操作被取消
        },
        // [修复] 增加 onClosed 回调，以防用户通过点击遮罩层或按 ESC 关闭
        onClosed: () => {
            cleanup();
            resolve(false);
        }
      };
      
      const vnode = createVNode(AxiomConfirmDialog, props);
      
      if (app && app._context) {
        vnode.appContext = app._context;
      }

      render(vnode, container);
    });
  };

  return { show };
}; 